import config from '@/env.js'
import $cache from '@/utils/cache.js'
import $api from '@/utils/request.js'

const tools = {
	//判断用户是否登录
	isLogin() {
		const userInfo = $cache.get('userInfo')
		if (!userInfo) {
			return false;
		}
		if (userInfo.is_new_user == 1) {
			return false;
		}
		return true;
	},

	//判断object是否为空
	isObjNotEmpty(obj) {
		return typeof obj === 'object' && obj !== null && Object.keys(obj).length > 0;
	},

	// 获取基础接口地址
	baseUrl() {
		return config.baseUrl
	},

	//uview上传方法封装
	async uploadfile(event, filelist) {
		// 当设置 mutiple 为 true 时, file 为数组格式，否则为对象格式
		let lists = [].concat(event.file)
		let fileListLen = filelist.length
		lists.map((item) => {
			filelist.push({
				...item,
				status: 'uploading',
				message: '上传中'
			})
		})
		for (let i = 0; i < lists.length; i++) {
			const res = await this.uploadFilePromise(lists[i].thumb)
			let item = filelist[fileListLen]
			filelist.splice(fileListLen, 1, Object.assign(item, {
				status: 'success',
				message: '上传成功',
				url: res.path
			}))
			fileListLen++
		}
		console.log('filelist:', filelist);
		return filelist;
	},

	//向服务端发送上传图片请求
	uploadFilePromise(url) {
		const token = $cache.get('token')
		const lang = uni.getStorageSync('showLanguage')
		return new Promise((resolve, reject) => {
			uni.uploadFile({
				url: config.baseUrl + '/api/User/uploadimage',
				filePath: url,
				name: 'file',
				header: {
					token: token ?? '',
					lang: lang ?? ''
				},
				// formData: {
				// 	user: $cache.get('user_info')
				// },
				success: (res) => {
					if (res.statusCode == 200) {
						let result = JSON.parse(res.data);
						if (result.code == 200) {
							setTimeout(() => {
								resolve(result.data)
							}, 600)
						} else {
							uni.showToast({
								content: result.msg
							})
						}
					} else {
						uni.showToast({
							content: res.errMsg
						})
					}
				},
				fail: (err) => {
					resolve(err);
				}
			});
		})
	},

	//提取二维数组中的某个字段组成字符串
	arrayToString($arr, $field) {
		let $new_arr = $arr.map(item => {
			return item[$field]
		})
		return $new_arr.join();
	},

	//获取当前时间
	time() {
		return Math.round(new Date() / 1000);
	},

	//复制字符串
	copy(str) {
		// #ifdef H5
		let aux = document.createElement("input");
		aux.setAttribute("value", str);
		document.body.appendChild(aux);
		aux.select();
		document.execCommand("copy");
		document.body.removeChild(aux);
		uni.showToast({
			title: "复制成功",
		})
		// #endif

		// #ifndef H5
		uni.setClipboardData({
			data: str.toString(),
		})
		// #endif
	},

	//保存图片到本地
	saveFile(filesrc) {
		let _self = this;
		//获取相册授权
		uni.getSetting({
			success(res) {
				if (!res.authSetting['scope.writePhotosAlbum']) {
					uni.authorize({
						scope: 'scope.writePhotosAlbum',
						success() {
							//这里是用户同意授权后的回调
							_self.saveFileToLocal(filesrc);
						},
						fail() { //这里是用户拒绝授权后的回调
							uni.showToast({
								title: "保存失败",
								icon: "none"
							});
						}
					})
				} else { //用户已经授权过了
					_self.saveFileToLocal(filesrc);
				}
			}
		})
	},

	//保存文件到本地
	saveFileToLocal(filesrc) {
		let _self = this;
		uni.showModal({
			title: '提示',
			content: '确定保存到相册吗',
			success: function(res) {
				if (res.confirm) {
					uni.downloadFile({
						url: filesrc, //文件地址
						success: (res) => {
							if (res.statusCode === 200) {
								uni.saveImageToPhotosAlbum({
									filePath: res.tempFilePath,
									success: function() {
										uni.showToast({
											title: "保存成功",
											icon: "none"
										});
									},
									fail: function() {
										uni.showToast({
											title: "保存失败",
											icon: "none"
										});
									}
								});
							}
						}
					})
				} else if (res.cancel) {
					uni.showToast({
						title: "保存失败",
						icon: "none"
					});
				}
			}
		});
	},

	//分页加载
	async loadingFun(action, params = {}, dataLists = [], page, loadStatus) {
		let count = 0;
		let extend = {};
		if (loadStatus === 'loadmore') {
			// 拷贝对象
			dataLists = Object.assign([], dataLists)
			const res = await $api(action, {
				page: page, //当前页码
				...params
			}, 'POST')
			uni.stopPullDownRefresh();
			let length = res.list.length;
			if (length > 0) {
				dataLists.push(...res.list)
				page = ++page
				loadStatus = 'loadmore';
			} else {
				loadStatus = 'nomore';
			}

			count = res.count
		}
		return {
			dataLists,
			count,
			page,
			loadStatus,
		}
	},

	//微信小程序版本升级
	mpAutoUpdate() {
		// 获取小程序更新机制兼容 
		if (uni.canIUse('getUpdateManager')) {
			const updateManager = uni.getUpdateManager()
			// 检查是否有新版本发布
			updateManager.onCheckForUpdate(function(res) {
				if (res.hasUpdate) {
					//小程序有新版本，则静默下载新版本，做好更新准备
					updateManager.onUpdateReady(function() {
						uni.showModal({
							title: '更新提示',
							content: '新版本已经准备好，是否重启应用？',
							success: function(res) {
								if (res.confirm) {
									//新的版本已经下载好，调用 applyUpdate 应用新版本并重启
									updateManager.applyUpdate()
								} else if (res.cancel) {
									//如果需要强制更新，则给出二次弹窗，如果不需要，则这里的代码都可以删掉了
									uni.showModal({
										title: '温馨提示',
										content: '我们已经做了新的优化，请及时更新哦~',
										showCancel: false, //隐藏取消按钮，也可显示，取消会走res.cancel，然后从新开始提示
										success: function(res) {
											//第二次提示后，强制更新           
											if (res.confirm) {
												// 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
												updateManager.applyUpdate()
											} else if (res.cancel) {
												//重新回到版本更新提示
												autoUpdate()
											}
										}
									})
								}
							}
						})
					})
					// 新的版本下载失败
					updateManager.onUpdateFailed(function() {
						uni.showModal({
							title: '温馨提示',
							content: '新版本已经上线，请您删除当前小程序，重新搜索打开',
						})
					})
				}
			})
		} else {
			// 提示用户在最新版本的客户端上体验
			uni.showModal({
				title: '温馨提示',
				content: '当前微信版本过低，可能无法使用该功能，请升级到最新版本后重试。'
			})
		}
	},

	// 加入收藏
	async addFavorite(item) {
		await $api('/goods/collect_goods', {
			goods_id: item.goods_id
		})
		return true
	},

	// 加入购物车
	async addCart(item) {
		await $api('/cart/addcart', {
			item_id: item.item_id ?? 0,
			goods_id: item.goods_id,
			goods_num: item.goods_num ?? 1
		})
		return true
	},
}
export default tools;